<?php
class Solicitudes_Model_DetalleSolicitud extends Model_Cna {

    public function __construct() {
        parent::__construct();
    }

    public function getDatosSolicitud($codsolicitud) {
        $SolicitudTable = new Solicitudes_Model_DbTable_Solicitudes();
        return $SolicitudTable->find($codsolicitud)->current()->toArray();
    }

    /**
     * Obtiene la lista de programas de una IES para solicitar acreditación
     * @param $codinstitucion Código de la IES
     * @return array
     */
    public function getProgramasIES($codsede, $tiposolicitud) {
        $SolicitudTable = new Solicitudes_Model_DbTable_Programas();
        return $SolicitudTable->getProgramasIES($codsede="", $tiposolicitud);
    }

    /**
     * Obtiene la lista de programas de una IES para solicitar renovación
     * @param $codinstitucion Código de la IES
     * @return array
     */
    public function getProgramasRenovacionIES($codinstitucion, $tiposolicitud) {
        $SolicitudTable = new Solicitudes_Model_DbTable_Programas();
        return $SolicitudTable->getProgramasRenovacionIES($codinstitucion, $tiposolicitud);
    }

    /**
     * Obtiene la lista de programas de una IES para solicitar acreditación
     * @param $codinstitucion Código de la IES
     * @return array
     */
    public function getCountProgramasIES($codinstitucion) {
        $SolicitudTable = new Solicitudes_Model_DbTable_Programas();
        return count($SolicitudTable->getProgramasIES($codinstitucion));
    }

    /**
     * Retorna en un array los datos de un programa
     * @param $codprograma Código del programa
     * @return array
     */
    public function cargardatosPrograma($codprograma = "", $codsnies = "", $pro_codprograma="" ) {
        $SolicitudTable = new Solicitudes_Model_DbTable_Programas();
        return $SolicitudTable->cargardatosPrograma($codprograma, $codsnies, $pro_codprograma);
    }

    /**
     * Retorna en el área o núcleo básico del conocimiento de un programa
     * @param $codprograma Código del programa
     * @param $prioridad 1. Area 2. Núcleo
     * @return string Nombre del área o núcleo
     */
    public function obtener_area_programa($codprograma, $prioridad) {
        $SolicitudTable = new Solicitudes_Model_DbTable_Programas();
        return $SolicitudTable->obtener_area_programa($codprograma, $prioridad);
    }

    /**
     * Retorna la fecha de vigencia de la resolución de un programa
     * @param $codprograma Código del programa
     * @param $tipo resolución 2= Alta calidad, 3=Registro calificado
     * @return date Fecha de vigencia de la resolución
     */
    public function getVigenciaResolucion($codprograma, $tipo) {
        $SolicitudTable = new Solicitudes_Model_DbTable_Programas();
        return $SolicitudTable->getVigenciaResolucion($codprograma, $tipo);
    }

    /**
     * Asignar programas a una solicitud
     * @param integer $codsolicitud Código de la solicitud
     * @param array $programas los codigos de los programas
     * que serán asignados a la solicitud
     */
    public function asignarProgramasSolicitud(array $programas, $tiposolicitud, $fecha = "") {
        $procesosTable = new Solicitudes_Model_DbTable_Procesos();
        $procesosTable->asignarProgramasSolicitud($programas, $tiposolicitud, $fecha);
    }

    /**
     * Des - Asignar programas de una solicitud
     * @param integer $codsolicitud Código de la solicitud
     * @param array $programas los codigos de los programas
     * que serán des-asignados a la solicitud
     */
    public function desasignarProgramasSolicitud($codsolicitud, array $programas) {
        $procesosTable = new Solicitudes_Model_DbTable_Procesos();
        $procesosTable->desasignarProgramasSolicitud($codsolicitud, $programas);
    }

    /**
     * Obtiene la lista de programas asignados a una solicitud
     * @param integer $codsolicitud Código de la solicitud
     * @param array Datos de los programas que están asignados a la solicitud
     */
    public function getProcesosSolicitud($codsolicitud) {
        $procesosTable = new Solicitudes_Model_DbTable_Procesos();
        return $procesosTable->getProcesosSolicitud($codsolicitud);
    }

    /**
     * Retorna en un array los datos de un proceso
     * @param integer $codproceso Código del proceso
     * @return array
     */
    public function cargardatosProceso($codproceso) {
        $SolicitudTable = new Solicitudes_Model_DbTable_Procesos();
        return $SolicitudTable->find($codproceso)->current()->toArray();
    }

    /**
     * Modifica los datos de un proceso
     * @param integer $codproceso Código del proceso
     * @return booleam
     */
    public function guardardatosProceso($datos) {
        $SolicitudTable = new Solicitudes_Model_DbTable_Procesos();
        return $SolicitudTable->find($datos["codproceso"])->current()->setFromArray($datos)->save();
    }

    /**
     * Almacena los datos de las sintesis del programa
     * @param array $datos Los datos de la síntesis
     */
    public function guardarSintesis($datos) {
        //$datos = $this->forceEmptyAsNull($datos);
        $sintesisTable = new Solicitudes_Model_DbTable_Sintesis();
        if(isset($datos["codsintesis"]) && ! empty($datos["codsintesis"])) {
            $row = $sintesisTable->find($datos["codsintesis"])->current();
            return $row->setFromArray($datos)->save();
        } else {
            unset($datos["codsintesis"]);
            $key = $sintesisTable->createRow($datos)->save();
            return $key;
        }
    }

    /**
     * Obtiene el estado de un proceso
     * @param integer $codproceso Código del proceso
     * @param integer Código del estado del proceso
     */
    public function getEstadoProceso($codproceso) {
        $datos_proceso = $this->cargardatosProceso($codproceso);
        return $datos_proceso["codestado"];
    }

    /**
     * Retorna en un array los datos de sintesis de un programa
     * @param $codprograma Código del programa
     * @return array
     */
    public function cargarSintesis($codigo, $codproceso, $codestado = "") {
        $SolicitudTable = new Solicitudes_Model_DbTable_Sintesis();
        return $SolicitudTable->cargarSintesis($codigo, $codproceso, $codestado);
    }

    /**
     * Elimina el documento adjunto de una sintesis
     * @param integer Código del documento
     * @return bool
     */
    public function eliminarAdjuntoSintesis($coddocumento) {
        $adjuntoTable = new Generales_Model_DbTable_Documentos();
        $adjunto = new Generales_Model_Documentos();
        $datos_adjunto = $adjunto->cargarDatos($coddocumento);
        try {
            $adjuntoTable->getAdapter()->delete("documentosprograma_cna", "coddocumento={$coddocumento}");
            $adjuntoTable->getAdapter()->delete("documentos_cna", "coddocumento={$coddocumento}");
            $nombre_archivo = $_SERVER['DOCUMENT_ROOT'] . "/cna/uploads/" . $datos_adjunto["nombrecodificado"];
            $nombre_archivo = str_replace('/', '\\', $nombre_archivo);
            return unlink($nombre_archivo);
        } catch(Exception $e) {
            $adjuntoTable->getAdapter()->rollBack();
            throw $e;
        }
    }

    /**
     * Almacena los datos de un archivo adjunto a un programa
     * @param array $datos Los datos del para el registro
     */
    public function guardarAdjuntoSintesis($datos) {
        $adjuntoTable = new Generales_Model_DbTable_Documentos();
        $adjuntoTable->getAdapter()->beginTransaction();
        try {
            $key = $adjuntoTable->createRow($datos)->save();
            $SolicitudTable = new Solicitudes_Model_DbTable_Sintesis();
            $datos_rel["coddocumento"] = $key;
            $datos_rel["codsintesis"] = $datos["codsintesis"];
            $SolicitudTable->getAdapter()->insert("documentosprograma_cna", $datos_rel);
            $adjuntoTable->getAdapter()->commit();
        } catch(Exception $e) {
            $adjuntoTable->getAdapter()->rollBack();
            throw $e;
        }
    }

    /**
     * Retorna el código de un archivo adjunto a una sintesis
     * @param $codsintesis Código de la síntesis
     * @return $coddocumento Código del documento
     */
    public function getcodigoAdjunto($codsintesis) {
        $SolicitudTable = new Solicitudes_Model_DbTable_Sintesis();
        return $SolicitudTable->getcodigoAdjunto($codsintesis);
    }

    /**
     * Obtiene un array con la lista de documentos adjuntos de una síntesis
     * @param $codsintesis Código de la síntesis
     * @return array
     */
    public function getAdjuntosSintesis($codsintesis) {
        $SolicitudTable = new Solicitudes_Model_DbTable_Sintesis();
        return $SolicitudTable->getAdjuntosSintesis($codsintesis);
    }

    /**
     * Analiza y actualiza el estado de completitud de la sintesis y sus padres
     * @param integer $codsintesis
     */
    public function actualizarCompletitud($codsintesis) {
        $SolicitudTable = new Solicitudes_Model_DbTable_Sintesis();
        return $SolicitudTable->actualizarCompletitud($codsintesis);
    }

    /**
     * Verifica si la información de una pestaña se encuentra completa
     * @param $codproceso Código del proceso
     * @param $codestado Código del estado
     * @param $codigoTab Código de la pestaña
     */
    public function isCompleto($codproceso, $codestado, $codigoTab) {
        if($codigoTab == 4) {
            return true;
        }
        $cantidad = Zend_Db_Table::getDefaultAdapter()->fetchOne("SELECT COUNT(*) FROM completitud_sintesisprograma_cna WHERE codproceso={$codproceso} AND codestado={$codestado} AND codigointerno='{$codigoTab}' AND completo='S' ");
        if($cantidad > 0) {
            return true;
        }
        return false;
    }

    /**
     * Busca la información de instalaciones físicas del proceso
     * @param integer $codproceso  Código del proceso
     * @param integer $codestado Código del estado
     * @return array $datos
     */
    public function buscarInstalacionesFisicas($codproceso, $codestado) {
        $procesosTable = new Solicitudes_Model_DbTable_Procesos();
        $datos = array();
        $array_instalaciones = $procesosTable->buscarInstalacionesFisicas($codproceso, $codestado);
        foreach($array_instalaciones as $key => $valor) {
            if(! isset($datos["sumac_{$valor["codinstalacion"]}"])) {
                $datos["sumac_{$valor["codinstalacion"]}"] = 0;
                $datos["sumaa_{$valor["codinstalacion"]}"] = 0;
            }
            $datos["sumac_{$valor["codinstalacion"]}"] += intval($valor["cantidad"]);
            $datos["sumaa_{$valor["codinstalacion"]}"] += intval($valor["area"]);
            if(! in_array($valor["codinstalacion"], array(
                30, 31, 50
            ))) {
                if(! isset($datos["sumae_{$valor["tipotenencia"]}"])) {
                    $datos["sumae_{$valor["tipotenencia"]}"] = 0;
                    $datos["sumam_{$valor["tipotenencia"]}"] = 0;
                }
                $datos["sumae_{$valor["tipotenencia"]}"] += intval($valor["cantidad"]);
                $datos["sumam_{$valor["tipotenencia"]}"] += intval($valor["area"]);
                if(! isset($datos["sumae"])) {
                    $datos["sumae"] = 0;
                    $datos["sumam"] = 0;
                }
                $datos["sumae"] += intval($valor["cantidad"]);
                $datos["sumam"] += intval($valor["area"]);
            }
            if(in_array($valor["codinstalacion"], array(
                30, 31
            ))) {
                if(! isset($datos["sumape_{$valor["tipotenencia"]}"])) {
                    $datos["sumape_{$valor["tipotenencia"]}"] = 0;
                    $datos["sumapm_{$valor["tipotenencia"]}"] = 0;
                }
                $datos["sumape_{$valor["tipotenencia"]}"] += intval($valor["cantidad"]);
                $datos["sumapm_{$valor["tipotenencia"]}"] += intval($valor["area"]);
                if(! isset($datos["sumape"])) {
                    $datos["sumape"] = 0;
                    $datos["sumapm"] = 0;
                }
                $datos["sumape"] += intval($valor["cantidad"]);
                $datos["sumapm"] += intval($valor["area"]);
            }
            $datos["cantidad_{$valor["codinstalacion"]}_{$valor["tipotenencia"]}"] = intval($valor["cantidad"]);
            $datos["area_{$valor["codinstalacion"]}_{$valor["tipotenencia"]}"] = intval($valor["area"]);
        }
        return $datos;
    }

    /**
     * Elimina la información de instalaciones físicas de un proceso
     * @param integer $codproceso  Código del proceso
     * @param integer $codestado Código del estado
     */
    public function eliminarInstalacionesFisicas($codproceso, $codestado) {
        $procesosTable = new Solicitudes_Model_DbTable_Procesos();
        $procesosTable->getAdapter()->delete("instalacionesfisicasproceso_cna", "codproceso={$codproceso} AND codestado={$codestado}");
    }

    /**
     * Almacena la información de instalaciones físicas de un proceso
     * @param array $datos Los datos para el registro
     */
    public function guardarInstalacionesFisicas($datos) {
        $procesosTable = new Solicitudes_Model_DbTable_Procesos();
        $datos = $this->forceEmptyAsNull($datos);
        $procesosTable->getAdapter()->insert("instalacionesfisicasproceso_cna", $datos);
    }

    /**
     * Almacena la información de recursos bibliográficos y logísticos del proceso
     * @param array $datos información del recurso
     */
    public function guardarRecursosproceso($datos) {
        $procesosTable = new Solicitudes_Model_DbTable_Recursosproceso();
        if(isset($datos["codrecursoproceso"]) && ! empty($datos["codrecursoproceso"])) {
            $row = $procesosTable->find($datos["codrecursoproceso"])->current();
            return $row->setFromArray($datos)->save();
        } else {
            unset($datos["codrecursoproceso"]);
            $key = $procesosTable->createRow($datos)->save();
            return $key;
        }
    }

    /**
     * Busca los datos de un recurso
     * @param integer n$codrecursoproceso Código del recurso
     * @return Array con los datos del recurso
     */
    public function buscarRecurso($codrecursoproceso) {
        $procesosTable = new Solicitudes_Model_DbTable_Recursosproceso();
        return $procesosTable->find($codrecursoproceso)->current()->toArray();
    }

    /**
     * Elimina un recurso de un proceso
     * @param integer $codrecursoproceso Código del recurso
     */
    public function eliminarRecurso($codrecursoproceso) {
        $procesosTable = new Solicitudes_Model_DbTable_Recursosproceso();
        $procesosTable->delete("codrecursoproceso={$codrecursoproceso}");
    }

    /**
     * Busca los recursos de un proceso
     * @param integer $codproceso Código del proceso
     * @param integer $codestado Código del estado
     * @param integer $subtiporecurso Código del recurso
     * @return Array con los datos de recursos
     */
    public function buscarRecursosproceso($codproceso, $codestado, $subtiporecurso = 1) {
        $procesosTable = new Solicitudes_Model_DbTable_Recursosproceso();
        return $procesosTable->buscarRecursosproceso($codproceso, $codestado, $subtiporecurso);
    }

    /**
     * Busca la información de docentes del proceso
     * @param integer $codproceso  Código del proceso
     * @param integer $codestado Código del estado
     * @return array $datos
     */
    public function buscarDocentes($codproceso, $codestado) {
        $procesosTable = new Solicitudes_Model_DbTable_Procesos();
        $datos = array();
        $array_docentes = $procesosTable->buscarDocentes($codproceso, $codestado);
        foreach($array_docentes as $key => $valor) {
            if(! isset($datos["total_{$valor["numeroano"]}_{$valor["periodo"]}_{$valor["tipodedicacion"]}"])) {
                $datos["total_{$valor["numeroano"]}_{$valor["periodo"]}_{$valor["tipodedicacion"]}"] = 0;
            }
            $datos["total_{$valor["numeroano"]}_{$valor["periodo"]}_{$valor["tipodedicacion"]}"] += intval($valor["cantidad"]);
            $datos["cantidad_{$valor["numeroano"]}_{$valor["periodo"]}_{$valor["tipodedicacion"]}_{$valor["tiponivel"]}"] = intval($valor["cantidad"]);
            $datos["ano_{$valor["numeroano"]}_{$valor["periodo"]}"] = intval($valor["ano"]);
            $datos["periodo_{$valor["numeroano"]}_{$valor["periodo"]}"] = intval($valor["periodo"]);
        }
        return $datos;
    }

    /**
     * Elimina la información de docentes de un proceso
     * @param integer $codproceso  Código del proceso
     * @param integer $codestado Código del estado
     */
    public function eliminarDocentes($codproceso, $codestado) {
        $procesosTable = new Solicitudes_Model_DbTable_Procesos();
        $procesosTable->getAdapter()->delete("docentesproceso_cna", "codproceso={$codproceso} AND codestado={$codestado}");
    }

    /**
     * Almacena la información estadística de los docentes de un proceso
     * @param array $datos Los datos para el registro
     */
    public function guardarDocentes($datos) {
        $datos = $this->forceEmptyAsNull($datos);
        $procesosTable = new Solicitudes_Model_DbTable_Procesos();
        $datos = $this->forceEmptyAsNull($datos);
        $procesosTable->getAdapter()->insert("docentesproceso_cna", $datos);
    }

    /**
     * Almacena la información de los docentes visitantes de un proceso
     * @param array $datos Los datos para el registro
     */
    public function guardarDocentesVisita($datos) {
        $datos = $this->forceEmptyAsNull($datos);
        $procesosTable = new Solicitudes_Model_DbTable_Docentesvisita();
        if(isset($datos["coddocentevisita"]) && ! empty($datos["coddocentevisita"])) {
            $row = $procesosTable->find($datos["coddocentevisita"])->current();
            return $row->setFromArray($datos)->save();
        } else {
            unset($datos["coddocentevisita"]);
            $key = $procesosTable->createRow($datos)->save();
            return $key;
        }
    }

    /**
     * Elimina la información de docentesvisita de un proceso
     * @param integer $coddocentevisita Código del registro
     */
    public function eliminarDocentesVisita($coddocentevisita) {
        $procesosTable = new Solicitudes_Model_DbTable_Docentesvisita();
        $procesosTable->delete("coddocentevisita={$coddocentevisita}");
    }

    /**
     * Busca la información de docentes visita del proceso
     * @param integer $codproceso  Código del proceso
     * @param integer $codestado Código del estado
     * @return array $datos
     */
    public function buscarDocentesVisita($codproceso, $codestado, $tipodocente = "VI") {
        $procesosTable = new Solicitudes_Model_DbTable_Docentesvisita();
        return $procesosTable->getSelectFetchAll($codproceso, $codestado, $tipodocente);
    }

    /**
     * Busca la información de docentesvisita de un proceso
     * @param integer $coddocentevisita Código del registro
     */
    public function buscarDocenteVisita($coddocentevisita) {
        $procesosTable = new Solicitudes_Model_DbTable_Docentesvisita();
        return $procesosTable->find($coddocentevisita)->current()->toArray();
    }

    /**
     * Elimina la información de estudiantes de un proceso
     * @param integer $codproceso  Código del proceso
     * @param integer $codestado Código del estado
     */
    public function eliminarEstudiantes($codproceso, $codestado) {
        $procesosTable = new Solicitudes_Model_DbTable_Procesos();
        $procesosTable->getAdapter()->delete("estudiantesproceso_cna", "codproceso={$codproceso} AND codestado={$codestado}");
    }

    /**
     * Almacena la información estadística de los estudiantes de un proceso
     * @param array $datos Los datos para el registro
     */
    public function guardarEstudiantes($datos) {
        $procesosTable = new Solicitudes_Model_DbTable_Procesos();
        $datos = $this->forceEmptyAsNull($datos);
        $procesosTable->getAdapter()->insert("estudiantesproceso_cna", $datos);
    }

    /**
     * Busca la información de estudiantes del proceso
     * @param integer $codproceso  Código del proceso
     * @param integer $codestado Código del estado
     * @return array $datos
     */
    public function buscarEstudiantes($codproceso, $codestado) {
        $procesosTable = new Solicitudes_Model_DbTable_Procesos();
        $datos = array();
        $array_estudiantes = $procesosTable->buscarEstudiantes($codproceso, $codestado);
        foreach($array_estudiantes as $key => $valor) {
            $datos["cantidad_{$valor["numeroano"]}_{$valor["periodo"]}_{$valor["tipoestudiante"]}"] = intval($valor["cantidad"]);
            $datos["ano_{$valor["numeroano"]}_{$valor["periodo"]}"] = intval($valor["ano"]);
            $datos["periodo_{$valor["numeroano"]}_{$valor["periodo"]}"] = intval($valor["periodo"]);
        }
        return $datos;
    }

    /**
     * Almacena la información de los cohortes de un proceso
     * @param array $datos Los datos para el registro
     */
    public function guardarCohorte($datos) {
        $datos = $this->forceEmptyAsNull($datos);
        $procesosTable = new Solicitudes_Model_DbTable_Cohortes();
        if(isset($datos["codcohorte"]) && ! empty($datos["codcohorte"])) {
            $row = $procesosTable->find($datos["codcohorte"])->current();
            return $row->setFromArray($datos)->save();
        } else {
            unset($datos["codcohorte"]);
            $key = $procesosTable->createRow($datos)->save();
            return $key;
        }
    }

    /**
     * Elimina la información de cohortes de un proceso
     * @param integer $coddocentevisita Código del registro
     */
    public function eliminarCohorte($codcohorte) {
        $procesosTable = new Solicitudes_Model_DbTable_Cohortes();
        $procesosTable->delete("codcohorte={$codcohorte}");
    }

    /**
     * Busca la información de cohortes de un proceso
     * @param integer $codcohorte Código del registro
     * @return array $datos
     */
    public function buscarCohorte($codcohorte) {
        $procesosTable = new Solicitudes_Model_DbTable_Cohortes();
        return $procesosTable->find($codcohorte)->current()->toArray();
    }

    /**
     * Busca la información de cohortes visita del proceso
     * @param integer $codproceso  Código del proceso
     * @param integer $codestado Código del estado
     * @return array $datos
     */
    public function buscarCohortes($codproceso, $codestado) {
        $procesosTable = new Solicitudes_Model_DbTable_Cohortes();
        return $procesosTable->getSelectFetchAll($codproceso, $codestado);
    }

    /**
     * Busca el max número de cohortes de un proceso
     * @param integer $codproceso  Código del proceso
     * @param integer $codestado Código del estado
     * @return integer Número maximo de cohorte
     */
    public function buscarNumeroCohorte($codproceso, $codestado) {
        $procesosTable = new Solicitudes_Model_DbTable_Cohortes();
        return $procesosTable->buscarNumeroCohorte($codproceso, $codestado);
    }

    /**
     * Crear los años y periodos en la captura de docentes
     * @param $datos
     * @return $datos Array con los años y periodos creados
     */
    public function CrearAnosPeriodos($datos) {
        $ano = strval($datos["ano"]);
        $periodo = $datos["periodo"];
        //        $datos["ano_1_1"]= $datos["ano"];
        //        $datos["periodo_1_1"]= $datos["periodo"];
        //        Zend_Debug::dump($datos);
        foreach($datos as $key => $value) {
            if($key != "ano") {
                if(substr($key, 0, 3) == "ano") {
                    $key_periodo = "periodo" . substr($key, 3);
                    $datos[$key] = $ano;
                    $datos[$key_periodo] = $periodo;
                    $periodo = ($periodo == "2")?"1":"2";
                    $ano = ($periodo == "2")?($ano - 1):$ano;
                }
            }
        }
        //	    Zend_Debug::dump($datos);
        return $datos;
    }

    /*
	 * Duplica la información registrad en el estado condiciones iniciales
	 * para que el usuario IES pueda modificarla en el estado Autoevaluación
	 */
    public function CopiarDatosProceso($codproceso) {
        $sintesisTable = new Solicitudes_Model_DbTable_Sintesis();
        $sintesisTable->CopiarDatosProceso($codproceso);
    }

    /**
     * Almacena la información de las publicaciones de un docente
     * @param array $datos Los datos para el registro
     */
    public function guardarPublicacionDocente($datos) {
        $datos = $this->forceEmptyAsNull($datos);
        $procesosTable = new Solicitudes_Model_DbTable_PublicacionesDocente();
        if(isset($datos["coddocentevisita"]) && ! empty($datos["codpublicacion"])) {
            $row = $procesosTable->find($datos["codpublicacion"])->current();
            return $row->setFromArray($datos)->save();
        } else {
            unset($datos["codpublicacion"]);
            $key = $procesosTable->createRow($datos)->save();
            return $key;
        }
    }

    /**
     * Elimina la información de una publicación de un docente
     * @param integer $codpublicacion Código del registro
     */
    public function eliminarPublicacionDocente($codpublicacion) {
        $procesosTable = new Solicitudes_Model_DbTable_PublicacionesDocente();
        $procesosTable->delete("codpublicacion={$codpublicacion}");
    }

    /**
     * Busca la información de las publicaciones de un docente
     * @param integer $codproceso  Código del proceso
     * @return array $datos
     */
    public function buscarPublicacionesDocente($coddocente) {
        $procesosTable = new Solicitudes_Model_DbTable_PublicacionesDocente();
        return $procesosTable->fetchAll("coddocentevisita={$coddocente}");
    }

    /**
     * Busca la información de la publicación de un docente
     * @param integer $codpublicacion Código del registro
     */
    public function buscarPublicacionDocente($codpublicacion) {
        $procesosTable = new Solicitudes_Model_DbTable_PublicacionesDocente();
        return $procesosTable->find($codpublicacion)->current()->toArray();
    }
    

    /**
     * Obtiene la lista de programas de una SEDE para asignar a un usuario
     * @param $codsede Código de la SEDE
     * @param $codusuario Código del usuario
     * @return array
     */
    public function getProgramasasginacionusuarioSEDE($codsede,$codusuario="",$opcion=1){
        $SolicitudTable = new Solicitudes_Model_DbTable_Programas();
        return $SolicitudTable->getProgramasasginacionusuarioSEDE($codsede, $codusuario, $opcion);
    }
    
    /**
     * Retorna las ampliaciones de un programa
     * @param $codprograma Código del programa
     * @param $codproceso Código del proceso
     * @return Array
     */
    public function getAmpliacionesProgramas($codprograma, $codproceso="") {
        $SolicitudTable = new Solicitudes_Model_DbTable_Programas();
        return $SolicitudTable->getAmpliacionesProgramas($codprograma, $codproceso);
    }
    
    /**
     * Retorna los convenios nacionales de un programa
     * @param $codprograma Código del programa
     * @param $codproceso Código del proceso
     * @return Array
     */
    public function getConveniosNalProgramas($codprograma, $codproceso="") {
        $SolicitudTable = new Solicitudes_Model_DbTable_Programas();
        return $SolicitudTable->getConveniosNalProgramas($codprograma, $codproceso);
    }
    
    /**
     * Retorna los convenios internacionales de un programa
     * @param $codprograma Código del programa
     * @param $codproceso Código del proceso
     * @return Array
     */
    public function getConveniosIntProgramas($codprograma, $codproceso="") {
        $SolicitudTable = new Solicitudes_Model_DbTable_Programas();
        return $SolicitudTable->getConveniosIntProgramas($codprograma, $codproceso);
    }
    
    /**
     * Retorna los lugares de un programa
     * @param $codprograma Código del programa
     * @param $codproceso Código del proceso
     * @return Array
     */
    public function getLugarOfrecimientoProgramas($codprograma, $tipo="CE", $codproceso="") {
        $SolicitudTable = new Solicitudes_Model_DbTable_Programas();
        return $SolicitudTable->getLugarOfrecimientoProgramas($codprograma, $tipo, $codproceso);
    }
    
    /**
     * Retorna los datos adicionales de un programa
     * @param $codprograma Código del programa
     * @return Array
     */
    public function getProgramasAux($codprograma) {
        $SolicitudTable = new Solicitudes_Model_DbTable_Programas();
        return $SolicitudTable->getProgramasAux($codprograma);
    }
    
    /**
     * Retorna los datos de las áreas de investigación de un programa
     * @param $codprograma Código del programa
     * @return Array
     */
    public function getAreasInvestigacionPrograma($codprograma) {
        $SolicitudTable = new Solicitudes_Model_DbTable_Programas();
        return $SolicitudTable->getAreasInvestigacionPrograma($codprograma);
    }
    
    /**
     * Retorna los datos de las líneas de investigación de un programa
     * @param $codprograma Código del programa
     * @return Array
     */
    public function getLineasInvestigacionPrograma($codprograma) {
        $SolicitudTable = new Solicitudes_Model_DbTable_Programas();
        return $SolicitudTable->getLineasInvestigacionPrograma($codprograma);
    }
    
    /**
     * Retorna los datos del personal académico de un programa
     * @param $codprograma Código del programa
     * @return Array
     */
    public function getPersonalAcademicoPrograma($codprograma) {
        $SolicitudTable = new Solicitudes_Model_DbTable_Programas();
        return $SolicitudTable->getPersonalAcademicoPrograma($codprograma);
    }
    
    /**
     * Retorna los datos de  criterios de personal académico de un programa
     * @param $codprograma Código del programa
     * @return Array
     */
    public function getCriteriosPersonalPrograma($codprograma) {
        $SolicitudTable = new Solicitudes_Model_DbTable_Programas();
        return $SolicitudTable->getCriteriosPersonalPrograma($codprograma);
    }
    
    /**
     * Retorna los datos de la información de una tabla
     * @param $tabla Nombre de la tabla
     * @param $columna Nombre de la columa
     * @param $campobusqueda columna de búsquedad
     * @param $valorbusqueda valos a buscar
     * @return Array
     */
    public function getDatoTabla($tabla,$columna,$campobusqueda,$valorbusqueda) {
        $SolicitudTable = new Solicitudes_Model_DbTable_Programas();
        return $SolicitudTable->getDatoTabla($tabla,$columna,$campobusqueda,$valorbusqueda);
    }
    

    /**
     * arma el html con la información de docentes del proceso
     * @param array $datos  Datos de los docentes
     * @return string $html
     */
    public function armarhtmldocentes($datos) {
        $domConfig = Zend_Registry::get('domConfig');
        $array_dedicacion = $domConfig->TIPO_DEDICACION->toArray();
        $array_nivel = $domConfig->TIPO_NIVEL->toArray();
        
        $html = '
        <table width="95%" align="center" class="iceDatTbl zebra">
        <tr>
        	<th>'.$datos["ano"].'</th>
        	<th style="text-align:center;">-</th>
        	<th>Periodo '.$datos["periodo"].'</th>
         </tr>
        </table>
        
         <table width="95%" class="iceDatTbl zebra">
          <tr>
            <th rowspan="2"><div align="center"><strong>A&ntilde;o y Per&iacute;odo</strong></div></th>
            <th rowspan="2"><div align="center"><strong>Dedicaci&oacute;n (2)</strong></div></th>
            <th rowspan="2"><div align="center"><strong>Total</strong></div></th>
            <th colspan="6"><div align="center"><strong>Nivel de formaci&oacute;n (contabilizar solo el mayor nivel    de grado) (1)</strong></div></th>
          </tr>
          <tr>';
          
          foreach($array_nivel as $keyn => $valuen) {
             $html. '<th><div align="center"><strong>'.$valuen.'</strong></div></th>';
          }
          $html. '</tr>';
          $rowspan = 5;
             
             if ($datos["ano_1_1"]==$datos["ano_1_2"]){
                 for ($index1 = 1; $index1 < 6; $index1++) { //años
        		     for ($index2 = 2; $index2 > 0; $index2--) { // periodos
        				  $html.= '<tr>
        				           <td rowspan="'.$rowspan.'"><div align="center">'.$datos["ano_{$index1}_{$index2}"].' - '.$datos["periodo_{$index1}_{$index2}"].'</div></td>';
        				   foreach($array_dedicacion as $keyd => $valued) {
        				        $rowspan = 0;
        				        $html.= '<td><strong>'.$valued.'</strong></td>
        				    			<td><div align="center">'.$datos["total_{$index1}_{$index2}_{$keyd}"].'</div></td>';
        				        foreach($array_nivel as $keyn => $valuen) {
        				            $html.= '<td><div align="center">'.$datos["cantidad_{$index1}_{$index2}_{$keyd}_{$keyn}"].'</div></td>';
        						}
        						$html.= '</tr>';
        				   }
        				  $rowspan = 5;
        			  }
        		  }
             }else{
                 for ($index1 = 1; $index1 < 6; $index1++) { //años
        		     for ($index2 = 1; $index2 < 3; $index2++) { // periodos
        				  $html.='
        				    <tr>
        				     <td rowspan="'.$rowspan.'"><div align="center">'.$datos["ano_{$index1}_{$index2}"].' - '.$datos["periodo_{$index1}_{$index2}"].'</div></td>';
        				        foreach($array_dedicacion as $keyd => $valued) {
        				            $rowspan = 0;
                				    $html .='<td><strong>'.$valued.'</strong></td>
                				    		<td><div align="center">'.$datos["total_{$index1}_{$index2}_{$keyd}"].'</div></td>';
                				    foreach($array_nivel as $keyn => $valuen) {
                				        $html.='<td><div align="center">'.$datos["cantidad_{$index1}_{$index2}_{$keyd}_{$keyn}"].'</div></td>';
        							}
        				           $html.='</tr>';
        				  		}
        				  $rowspan = 5;
        			  }
        		  }
             }
          $html.= '</table>';
        return $html;
    }

    /**
     * arma el html con la información de estudiantes del proceso
     * @param array $datos  Datos de los estudiantes
     * @return string $html
     */
    public function armarhtmlestudiantes($datos) {
        $domConfig = Zend_Registry::get('domConfig');
        $array_captura = $domConfig->CAPTURA_ESTUDIANTES_AUTO->toArray();
        
        $html = '
        <table width="95%" align="center" class="iceDatTbl zebra">
        <tr>
        	<th>
        		Defina el &uacute;ltimo Año y Periodo del cual tiene informaci&oacute;n Ejemplo 2009 - 2:
        	</th>
        	<th> Ano '.$datos["ano"]. '
        	</th>
        	<th style="text-align:center;">-</th>
        	<th> Periodo '.$datos["periodo"].'</th>
         </tr>
        </table>
        
         <table width="95%" class="iceDatTbl zebra">
          <tr>
            <th width="20%"><div align="center"><strong>A&ntilde;o y Per&iacute;odo (1)</strong></div></th>';
            foreach($array_captura as $keyc => $valuec) {
               $html .= '<th width="16%"><div align="center"><strong>'.$valuec.'</strong></div></th>';
          }
          $html .= '</tr>';
          
        if ($datos["ano_1_1"]==$datos["ano_1_2"]){
          
             for ($index1 = 1; $index1 < 6; $index1++) { //años
                 for ($index2 = 2; $index2 > 0; $index2--) { // periodos
        		  $html .= '
        		  <tr>
        		    <td width="10%"><div align="center">'.$datos["ano_{$index1}_{$index2}"].' - '.$datos["periodo_{$index1}_{$index2}"].'</div></td>';
        		    foreach($array_captura as $keyc => $valuec) {
        			    $html .= '<td width="10%"><div align="center">'.$datos["cantidad_{$index1}_{$index2}_{$keyc}"].'</div></td>';
        		     }
        		  $html .= '</tr>';
                 }
             }
        }else {
            
             for ($index1 = 1; $index1 < 6; $index1++) { //años
                 for ($index2 = 1; $index2 < 3; $index2++) { // periodos
        		  $html .= '
        		  <tr>
        		    <td width="10%"><div align="center">'.$datos["ano_{$index1}_{$index2}"].' - '.$datos["periodo_{$index1}_{$index2}"].'</div></td>';
        		    foreach($array_captura as $keyc => $valuec) {
        			    $html .= '<td width="10%"><div align="center">'. $datos["cantidad_{$index1}_{$index2}_{$keyc}"].'</div></td>';
        		    }
        		  $html .= '</tr>';
                 }
             }
        }
        $html.= '</table>';
        return $html;;
    }

    /**
     * arma el html con la información de instalaciones del proceso
     * @param array $datos  Datos de los instalaciones
     * @return string $html
     */
    public function armarhtmlinstalaciones($datos) {
        $domConfig = Zend_Registry::get('domConfig');
    	$array_instalaciones = $domConfig->INSTALACION_FISICA->toArray();
    	$array_tenencia = $domConfig->TENENCIA->toArray();
    	$array_puestos = $domConfig->PUESTOS_INSTALACION_FISICA->toArray();
        
      $html = '
      <table width="95%" id="instalaciones" class="iceDatTbl zebra" border=0>
        <tr>
          <td rowspan="3" align="center" valign="middle"><strong>USO DE ESPACIOS</strong></td>
          <td colspan="10"><div align="center"><strong>TENENCIA</strong></div></td>
        </tr>
        <tr>';
          foreach ($array_tenencia as $value):
              $html.= '<td colspan=\"2\"><div align="center"><strong>'.$value.'</strong></div></td>';
           endforeach;
          $html.= '<td colspan="2"><div align="center"><strong>Total</strong></div></td>
        </tr>
       <tr>';
          foreach ($array_tenencia as $value):
              $html.= '<td><div align="center"><strong>CANTIDAD DE ESPACIOS</strong></div></td>
                       <td><div align="center"><strong>METROS&sup2;</strong></div></td>';
           endforeach;
          $html.= '<td><div align="center"><strong>CANTIDAD DE ESPACIOS</strong></div></td>
          		   <td><div align="center"><strong>METROS&sup2;</strong></div></td>
        </tr>';
    	foreach($array_instalaciones as $keyi =>$valuei){
    	    $html.= '<tr><td><div align="left">'.$valuei.'</div></td>';
    	    foreach($array_tenencia as $keyt =>$valuet){
    	       $html.= '<td><div align= "center">';
    	       $elemento_cantidad = "cantidad_{$keyi}_{$keyt}";
    		   $html.= $datos["cantidad_{$keyi}_{$keyt}"];
    	       $html.= '</div></td>';
    	       $html.= '<td><div align="center">';
    	       $elemento_area = "area_{$keyi}_{$keyt}";
    		   $html.= $datos["area_{$keyi}_{$keyt}"];
    	       $html.= '</div></td>';
    		}
    	    $html.= '<td><div align= "center">';
    		$html.= $datos["sumac_{$keyi}"];
    	    $html.= '</div></td>';
    	    $html.= '<td><div align="center">';
    		$html.=  $datos["sumaa_{$keyi}"];
    	    $html.= '</div></td>';
            $html.= '</tr>';
    	}
         $html.= '<tr><td><div align="center"><strong>TOTALES</strong></div></td>';
    	 foreach($array_tenencia as $keyt =>$valuet){
    	       $html.= '<td><div align= "center">';
    		   $html.= $datos["sumae_{$keyt}"];
    	       $html.= '</div></td>';
    	       $html.= '<td><div align="center">';
    		   $html.= $datos["sumam_{$keyt}"];
    	       $html.= '</div></td>';
    		}
    	$html.= '<td><div align= "center">';
    	$html.= $datos["sumae"];
    	$html.= '</div></td>';
    	$html.= '<td><div align="center">';
    	$html.= $datos["sumam"];
    	$html.= '</div></td>';
        $html.= '</tr>';
    
        $html.= '<tr><td colspan=11>&nbsp;</td></tr>';
        foreach($array_puestos as $keyi =>$valuei){
    	    $html.= '<tr><td><div align="left">'.$valuei.'</div></td>';
    	    foreach($array_tenencia as $keyt =>$valuet){
    	      $html.= '<td td colspan="2"><div align= "center">';
    		   $html.= $datos["cantidad_{$keyi}_{$keyt}"];
    		   $elemento_cantidad = "cantidad_{$keyi}_{$keyt}";
    	       $html.= '</div></td>';
    		}
    	    $html.= '<td colspan="2"><div align= "center">';
    		$html.= $datos["sumac_{$keyi}"];
    	    $html.= '</div></td>';
            $html.= '</tr>';
    	}
        
        $html.= '<tr><td><div align="center"><strong>TOTALES</strong></div></td>';
    	foreach($array_tenencia as $keyt =>$valuet){
    	    $html.= '<td colspan="2"><div align= "center">';
    		$html.= $datos["sumape_{$keyt}"];
    	    $html.= '</div></td>';
    	}
    	$html.= '<td colspan="2"><div align= "center">';
    	$html.= $datos["sumape"];
    	$html.= '</div></td>';
        $html.= '</tr>';
    	
        $promedio = 0;
        if ($datos["sumape"] >0 && ($datos["sumac_1"]+$datos["sumac_2"])>0){
            $promedio = round($datos["sumac_30"]/($datos["sumac_1"]),2);
        }
    
       $html.= '<tr><td colspan=11>&nbsp;</td></tr>';
        $html.= '<tr><td colspan=11><div align= "center">';
        $html.= '<strong>PROMEDIO DE PUESTOS POR AULAS DE CLASE= '. $promedio.'</a></strong>';
        $html.= '</td></tr>';
        $html.= '</table>';
        return $html;;
    }
    
    
    
    /**
     * arma el html con la información de docentes del proceso
     * @param array $datos  Datos de los docentes
     * @return string $html
     */
    public function armarhtmldocentescontratacion($datos) {
        $domConfig = Zend_Registry::get('domConfig');
        $html ='
		<table  width="95%" id="table_id" align="center" class="iceDatTbl zebra">
		  <thead>
		    <tr>
		      <th>No</th>
		      <th>Nombres</th>
		      <th>Apellidos</th>
		      <th>Dedicaci&oacute;n</th>
		      <th>Tipo contrataci&oacute;n</th>
		      <th>Duraci&oacute;n</th>
		      <th>Formación</th>
		      <th>Institución</th>
		      <th>Reponsabilidad</th>
		      <th>% labor acad&eacute;mica</th>
		    </tr>
		  </thead>
		  <tbody>';
			foreach ($datos as $key => $value):
		    $html .= '
		    <tr>
		      <td>'.($key+1).'</td>
		      <td>'.$value["nombres"].'</td>
		      <td>'.$value["apellidos"].'</td>
		      <td>'.$domConfig->TIPO_DEDICACION->$value["tipodedicacion"].'</td>
		      <td>'.$domConfig->TIPO_CONTRATO->$value["tipocontrato"].'</td>
		      <td><BR>Tiempo : '.$value["estadia"]." ".$domConfig->TIPOESTADIA->$value["tipoestadia"].'
		      </td>
		      <td>Nivel :'.$value["nivel"].'<BR>Area : '.$value["areaconocimiento"].'<BR>T&iacute;tulo : '.$value["tituloformacion"].'
		      </td>
		      <td><BR>Instituci&oacute;n : '.$value["institucion"].'</td>
		      <td>'.$value["actividades"].'</td>
		      <td>'.$value["horasdocencia"].'</td>
		      </td>
		    </tr>';
		   endforeach;
		  $html .= '</tbody>
		</table>';
        return $html;;
    }
        
}//fin de la clase